package Interfaz;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.wb.swt.SWTResourceManager;

import DTO.DTONuevaCompetencia;
import Excepcion.CantidadDePuntosInvalidoException;
import Excepcion.DeporteVacioException;
import Excepcion.ModalidadVacioException;
import Excepcion.NombreCaracterException;
import Excepcion.NombreCompetenciaExistenteException;
import Excepcion.PuntajeImposibleException;
import Excepcion.TamReglamentoInvalidoException;
import Negocios.ControlCompetencia;


/**
 * CU004 - Dar de alta competencia deportiva (modalidad Eliminatoria Doble)
 * @author 
 */
public class CU004_elim_doble {

	protected Shell shlNueva_eliminatoria;
	private Text txtCantidadMaximaSets;
	private Text txtPuntosPorAusencia;
	
	private Button btnSets;
	private Button btnPuntuacion;
	private Button btnResultadoFinal;

	private DTONuevaCompetencia dtoNuevaCompetencia;
	
	private CU004 pantallaAnterior;

	public CU004_elim_doble(CU004 pantallaAnterior, DTONuevaCompetencia dtoNuevaCompetencia) {
		this.pantallaAnterior = pantallaAnterior;
		this.dtoNuevaCompetencia = dtoNuevaCompetencia;
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		
		// Centrar ventana
		Monitor primary = display.getPrimaryMonitor();
		Rectangle bounds = primary.getBounds();
		Rectangle rect = shlNueva_eliminatoria.getBounds();
		int x = bounds.x + (bounds.width - rect.width) / 2;
		int y = bounds.y + (bounds.height - rect.height) / 2;	    
		shlNueva_eliminatoria.setLocation(x, y);
		
		Button button = new Button(shlNueva_eliminatoria, SWT.NONE);
		button.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				shlNueva_eliminatoria.close();
			}
		});
		button.setText("Cancelar");
		button.setBounds(314, 171, 108, 32);
		
		Button btnGuardar = new Button(shlNueva_eliminatoria, SWT.NONE);
		btnGuardar.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				if (datosValidos()) {
					llenarDTO();
					
					/*MessageBox messageBox = new MessageBox(shlNueva_eliminatoria, SWT.ICON_INFORMATION);
					StringBuilder mensaje = new StringBuilder();
					mensaje.append("Id usuario: " + dtoNuevaCompetencia.getIdUsuario() + "\n");
					mensaje.append("Nombre competencia: " + dtoNuevaCompetencia.getNombreCompetencia() + "\n");
					mensaje.append("Id deporte: " + dtoNuevaCompetencia.getIdDeporte() + "\n");
					
					ArrayList<ArrayList<Integer>> lugares = dtoNuevaCompetencia.getLugares();
					for (ArrayList<Integer> a : lugares) {
						mensaje.append("Id lugar: " + a.get(0) + " - Disponibilidad: " + a.get(1) + "\n");
					}
					
					mensaje.append("Id modalidad: " + dtoNuevaCompetencia.getIdModalidad() + "\n");
					mensaje.append("Reglamento: " + dtoNuevaCompetencia.getReglamento() + "\n");
					mensaje.append("Puntos por victoria: " + dtoNuevaCompetencia.getPuntosPorVictoria() + "\n");
					mensaje.append("Puntos por empate: " + dtoNuevaCompetencia.getPuntosPorEmpate() + "\n");
					mensaje.append("Puntos por presencia: " + dtoNuevaCompetencia.getPuntosPorPresencia() + "\n");
					mensaje.append("Puntos por ausencia: " + dtoNuevaCompetencia.getPuntosPorAusencia() + "\n");
					mensaje.append("Sets: " + dtoNuevaCompetencia.getSets() + "\n");
					mensaje.append("Puntuacion: " + dtoNuevaCompetencia.getPuntuacion() + "\n");
					
					messageBox.setMessage(mensaje.toString());
					messageBox.open();*/
					
					ControlCompetencia controlCompetencia = new ControlCompetencia();
					
					try {
						controlCompetencia.crearCompetencia(dtoNuevaCompetencia);
						
						MessageBox mensaje = new MessageBox(shlNueva_eliminatoria, SWT.ICON_INFORMATION);
						mensaje.setMessage("La nueva competencia ha sido creada exitosamente.");
						mensaje.open();
						
						shlNueva_eliminatoria.close();
					}
					catch (NombreCompetenciaExistenteException ex1) {
						MessageBox error = new MessageBox(shlNueva_eliminatoria, SWT.ICON_ERROR);
						error.setMessage("El nombre ingresado ya existe.\n" +
								"Por favor, ingrese un nombre diferente.");
						error.open();
					}
					catch (NombreCaracterException ex2) {
						ex2.printStackTrace();
					}
					catch (DeporteVacioException ex3) {
						ex3.printStackTrace();
					}
					catch (ModalidadVacioException ex4) {
						ex4.printStackTrace();
					}
					catch (TamReglamentoInvalidoException ex5) {
						ex5.printStackTrace();
					}
					catch (CantidadDePuntosInvalidoException ex6) {
						ex6.printStackTrace();
					}
					catch (PuntajeImposibleException ex7) {
						ex7.printStackTrace();
					}
					catch (Exception ex) {
						ex.printStackTrace();
					}
				}
			}
		});
		btnGuardar.setText("Guardar");
		btnGuardar.setBounds(182, 171, 108, 32);
		
		Button btnAnterior = new Button(shlNueva_eliminatoria, SWT.NONE);
		btnAnterior.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				//llenarDTO();
				pantallaAnterior.updateDTO(dtoNuevaCompetencia);
				shlNueva_eliminatoria.setVisible(false);
				pantallaAnterior.shlNueva.setVisible(true);
				pantallaAnterior.shlNueva.forceFocus();
			}
		});
		btnAnterior.setText("<< Anterior");
		btnAnterior.setBounds(50, 171, 108, 32);
		
		shlNueva_eliminatoria.open();
		shlNueva_eliminatoria.layout();
		while (!shlNueva_eliminatoria.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {
		shlNueva_eliminatoria = new Shell(SWT.CLOSE | SWT.TITLE | SWT.MIN);
		shlNueva_eliminatoria.setMinimumSize(new Point(132, 28));
		shlNueva_eliminatoria.setSize(450, 254);
		shlNueva_eliminatoria.setText("Modalidad Eliminatoria Doble");
		shlNueva_eliminatoria.addListener(SWT.Close, new Listener() {
			public void handleEvent(Event event) {
				pantallaAnterior.shlNueva.close();
			}
		});
		
		Label label = new Label(shlNueva_eliminatoria, SWT.NONE);
		label.setText("Forma de puntuaci\u00F3n:");
		label.setBounds(10, 13, 130, 15);
		
		final Label label_2 = new Label(shlNueva_eliminatoria, SWT.NONE);
		label_2.setText("Puntos por ausencia:");
		label_2.setEnabled(false);
		label_2.setBounds(140, 81, 115, 15);
		
		final Label label_1 = new Label(shlNueva_eliminatoria, SWT.NONE);
		label_1.setText("Cantidad m\u00E1xima:");
		label_1.setEnabled(false);
		label_1.setBounds(140, 41, 100, 15);
		
		txtCantidadMaximaSets = new Text(shlNueva_eliminatoria, SWT.BORDER);
		txtCantidadMaximaSets.setEnabled(false);
		txtCantidadMaximaSets.setBounds(242, 38, 76, 21);
		txtCantidadMaximaSets.addFocusListener(new FocusListener() {
			public void focusGained(FocusEvent e) {
				txtCantidadMaximaSets.setBackground(SWTResourceManager.getColor(255, 255, 255));
		    }
			
		    public void focusLost(FocusEvent e) {
		    	try {
		    		if (btnSets.getSelection()
		    				&& Integer.parseInt(txtCantidadMaximaSets.getText()) != 3
		    				&& Integer.parseInt(txtCantidadMaximaSets.getText()) != 5
		    				&& Integer.parseInt(txtCantidadMaximaSets.getText()) != 7
		    				&& Integer.parseInt(txtCantidadMaximaSets.getText()) != 9) {
		    			txtCantidadMaximaSets.setBackground(SWTResourceManager.getColor(255, 153, 153));
		    		}
		    	}
		    	catch (NumberFormatException ex) {
		    		txtCantidadMaximaSets.setBackground(SWTResourceManager.getColor(255, 153, 153));
		    	}
		    }
		});
		
		txtPuntosPorAusencia = new Text(shlNueva_eliminatoria, SWT.BORDER);
		txtPuntosPorAusencia.setEnabled(false);
		txtPuntosPorAusencia.setBounds(256, 78, 76, 21);
		txtPuntosPorAusencia.addFocusListener(new FocusListener() {
			public void focusGained(FocusEvent e) {
				txtPuntosPorAusencia.setBackground(SWTResourceManager.getColor(255, 255, 255));
		    }
			
		    public void focusLost(FocusEvent e) {
		    	try {
		    		if (btnPuntuacion.getSelection()
		    				&& (Integer.parseInt(txtPuntosPorAusencia.getText()) < 0
		    				|| Integer.parseInt(txtPuntosPorAusencia.getText()) > 9999)) {
		    			txtPuntosPorAusencia.setBackground(SWTResourceManager.getColor(255, 153, 153));
		    		}
		    	}
		    	catch (NumberFormatException ex) {
		    		txtPuntosPorAusencia.setBackground(SWTResourceManager.getColor(255, 153, 153));
		    	}
		    }
		});
		
		btnSets = new Button(shlNueva_eliminatoria, SWT.RADIO);
		btnSets.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				label_1.setEnabled(true);
				txtCantidadMaximaSets.setEnabled(true);
				label_2.setEnabled(false);
				txtPuntosPorAusencia.setEnabled(false);
			}
		});
		btnSets.setText("Sets");
		btnSets.setBounds(10, 40, 120, 16);
		
		btnPuntuacion = new Button(shlNueva_eliminatoria, SWT.RADIO);
		btnPuntuacion.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				label_1.setEnabled(false);
				txtCantidadMaximaSets.setEnabled(false);
				label_2.setEnabled(true);
				txtPuntosPorAusencia.setEnabled(true);
			}
		});
		btnPuntuacion.setText("Puntuaci\u00F3n");
		btnPuntuacion.setBounds(10, 80, 120, 16);
		
		btnResultadoFinal = new Button(shlNueva_eliminatoria, SWT.RADIO);
		btnResultadoFinal.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				label_1.setEnabled(false);
				txtCantidadMaximaSets.setEnabled(false);
				label_2.setEnabled(false);
				txtPuntosPorAusencia.setEnabled(false);
			}
		});
		btnResultadoFinal.setBounds(10, 121, 120, 16);
		btnResultadoFinal.setText("Resultado Final");

	}

	public void updateDTO(DTONuevaCompetencia dtoNuevaCompetencia) {
		this.dtoNuevaCompetencia.setIdUsuario(dtoNuevaCompetencia.getIdUsuario());
		this.dtoNuevaCompetencia.setNombreCompetencia(dtoNuevaCompetencia.getNombreCompetencia());
		this.dtoNuevaCompetencia.setLugares(dtoNuevaCompetencia.getLugares());
		this.dtoNuevaCompetencia.setIdDeporte(dtoNuevaCompetencia.getIdDeporte());
		this.dtoNuevaCompetencia.setReglamento(dtoNuevaCompetencia.getReglamento());
		this.dtoNuevaCompetencia.setIdModalidad(dtoNuevaCompetencia.getIdModalidad());
	}
	
	protected void llenarDTO() {
		// Limpio DTO
		dtoNuevaCompetencia.setSets(-1);
		dtoNuevaCompetencia.setPuntosPorAusencia(-1);
		
		if (btnSets.getSelection()) {
			dtoNuevaCompetencia.setSets(Integer.parseInt(txtCantidadMaximaSets.getText()));
		}
		else if (btnPuntuacion.getSelection()) {
			dtoNuevaCompetencia.setPuntosPorAusencia(Integer.parseInt(txtPuntosPorAusencia.getText()));
			dtoNuevaCompetencia.setPuntuacion(1);
		}
	}
	
	protected boolean datosValidos() {
		if (btnSets.getSelection()) {
			try {
	    		if (Integer.parseInt(txtCantidadMaximaSets.getText()) != 3
	    				&& Integer.parseInt(txtCantidadMaximaSets.getText()) != 5
	    				&& Integer.parseInt(txtCantidadMaximaSets.getText()) != 7
	    				&& Integer.parseInt(txtCantidadMaximaSets.getText()) != 9) {
	    			txtCantidadMaximaSets.setBackground(SWTResourceManager.getColor(255, 153, 153));
	    			
	    			MessageBox error = new MessageBox(shlNueva_eliminatoria, SWT.ICON_ERROR);
	    			error.setMessage("Cantidad de sets inv\u00E1lida.\n"
							+ "S\u00F3lo puede haber 3 (tres), 5 (cinco), 7 (siete) \u00F3 9 (nueve) sets por encuentro.");
					error.open();
	    			
	    			return false;
	    		}
	    	}
	    	catch (NumberFormatException ex) {
	    		txtCantidadMaximaSets.setBackground(SWTResourceManager.getColor(255, 153, 153));
	    		
	    		MessageBox error = new MessageBox(shlNueva_eliminatoria, SWT.ICON_ERROR);
	    		error.setMessage("Cantidad de sets inv\u00E1lida.\n"
						+ "S\u00F3lo puede haber 3 (tres), 5 (cinco), 7 (siete) \u00F3 9 (nueve) sets por encuentro.");
				error.open();
	    		
	    		return false;
	    	}
		}
		else if (btnPuntuacion.getSelection()) {
			try {
	    		if (Integer.parseInt(txtPuntosPorAusencia.getText()) < 0
	    				|| Integer.parseInt(txtPuntosPorAusencia.getText()) > 9999) {
	    			txtPuntosPorAusencia.setBackground(SWTResourceManager.getColor(255, 153, 153));
	    			
	    			MessageBox error = new MessageBox(shlNueva_eliminatoria, SWT.ICON_ERROR);
					error.setMessage("Puntaje por ausencia inv\u00E1lido.\n"
							+ "Debe ingresar un valor entero entre 0 (cero) y 9999 "
							+ "(nueve mil novecientos noventa y nueve).");
					error.open();
	    			
	    			return false;
	    		}
	    	}
	    	catch (NumberFormatException ex) {
	    		txtPuntosPorAusencia.setBackground(SWTResourceManager.getColor(255, 153, 153));
	    		
	    		MessageBox error = new MessageBox(shlNueva_eliminatoria, SWT.ICON_ERROR);
				error.setMessage("Puntaje por ausencia inv\u00E1lido.\n"
						+ "Debe ingresar un valor entero entre 0 (cero) y 9999 "
						+ "(nueve mil novecientos noventa y nueve).");
				error.open();
	    		
	    		return false;
	    	}
		}
		else if (!btnResultadoFinal.getSelection()) {
			MessageBox error = new MessageBox(shlNueva_eliminatoria, SWT.ICON_ERROR);
			error.setMessage("Debe seleccionar una forma de puntuaci\u00F3n de la lista.");
			error.open();
    		
    		return false;
		}
		
		return true;
	}
}
